#include"Sqlist.h"

//顺序表的初始化
Status InitList_Sq (SqList &L)
{
    L.elem = new struct number [MAXSIZE];//为顺序表分配空间
    if (!L.elem) exit(OVERFLOW);
    L.length = 0;
    return OK;
}
//销毁线性表
void DestroyList (SqList &L)
{
    if (L.elem) delete L.elem;//释放存储空间
}
//清空线性表
void ClearList(SqList &L)
{
    L.length = 0;
}
//得到线性表的长度
int GetList (SqList &L)
{
    return L.length;
}
//验证线性表是否为空
int ListEmpty(SqList &L)
{
    if (L.length == 0)
        return 1;
    else
        return 0;
}
//对顺序表取值
int GetElem(SqList &L,int i,struct number &e)//将顺序表的第i为数据给e返回
{
    if (i < 1 || i > L.length) return ERROR;
     e = L.elem[i-1];
    return OK;
}
//查找元素的位置
int Locate (SqList L,struct number e)
{//在顺序表中查找e,如果找到,返回其位置
    int i = 0;
    for (i = 0;i < L.length ;i++)
    {
        if (L.elem[i].num == e.num)
            return i+1;//找到返回其序号
    }
    return 0;//未找到返回0
}
//在顺序表中插入
Status ListInsert(SqList &L,int i,int e)
{
    if (i<1 || i>=L.length)
        return ERROR;//插入地址不合法
    if (L.length >MAXSIZE)
        return ERROR;//顺序表已经满了!
    //将n至i个元素向后移动
    for (int j = L.length - 1;j >= i-1;j--)//从最后一个元素开始向后移动
    {
        L.elem[j] = L.elem[j+1];
    }
    //将新元素e插入到i处
    L.elem[i-1].num = e;
    //表长加一
    L.length++;
    return OK;
}
//在顺序表中删除
Status ListDelete(SqList &L,int i, int &e)
{
    if (i<1 || i > L.length)
        return ERROR;//删除位置不合法
    for (int j = i;j < L.length ;j++)
    {
        L.elem[j-1] = L.elem[j];//覆盖i所在的i-1元素
    }
    L.length--;//表长减一
    return OK;
}
Status DisplayList (SqList L)
{
    int i = 0;
    if (L.length == 0)  return ERROR;
    for (i=0;i<L.length;i++)
    {
        cout<<L.elem[i].num<<endl;
    }
}
